/*
 * adc.c
 *
 *  Created on: 25-11-2012
 *      Author: Skeith
 */

#include "adc.h"

void AdcInit()
{
	volatile tU32 integerResult;

	AdcSetPinsel();

	ADCR = (1 << 0)		| //ustawiamy kanal 0
			((((CRYSTAL_FREQUENCY * PLL_FACTOR) /VPBDIV_FACTOR) / 4500000 - 1) << 8) | //czestotliwosc pracy przetwornika (4,5Mhz)
			(0 << 16) | //ustawienie burst na 0
			(0 << 17) | (0 << 18) | (0 << 19) | // 10-bitowa rozdzielczosc
			(1 << 21) | //wlaczenie przetwornika
			(1 << 24) | (0 << 25) | (0 << 26) | //natychmiastowy start przetwornika
			(0 << 27); //zbocze narastajace;

	Sleep(10);
	integerResult = ADDR;
}

void AdcSetPinsel()
{
	tU32 val = 1 << 12 | 1 << 13;
	tU32 maskedVal1;

	maskedVal1 = PINSEL1 & ~ADC_PINSEL_MASK;

	PINSEL1 = maskedVal1 | val;

}

tU16 AdcGetResult(tU8 channel)
{
	tU16 result;

	//okreslamy kanal z ktorega ma byc pobrana wartosc
	ADCR = (ADCR & 0xFFFFFF00) | (1 << channel) | (1 << 24) | (0 << 25) | (0 << 26);

	/* TUTAJ SPRAWDZIC POPRAWNOSC */
	while ((ADDR & (1 << 31)) == 0)
		;

	result = (ADDR >> 6) & 0x3FF;

	return result;
}

